今天,來到鐵人賽第十八天。
今天的天氣超級好呀!
話說台北馬拉松也在今天早上舉行。
想起了小編的去年此時,在努力跑21公里。
今年此時,坐在電腦前參加鐵人賽。
好吧,我們繼續完成今日的目標!
之前,我們已經寫了 MongoDB 如何安裝與執行。
因為,整個 MongoDB算是一套課程,小編在這裡,先著重Node.js概括的學習,閒有餘力,再深入MongoDB。
關於mongodb比較基礎且重要的,可以先參考:
MongoDB CRUD Operations :它裡面教你如何在mongodb裡 新增/讀取/更新/刪除 的基本資料操作。
所以,這邊,小編直接參考 access-mongodb-in-nodejs 完成此站這一系列的Node.JS學習。
那,我們開始吧!
同ms-sql的串接方式,我們需要安裝mongodb-driver,在command line 輸入:
npm install mongodb -g
cd myapp
npm install mongodb --save
我們打開package.json 看,安裝了 mongodb 2.2.11 :(注意,這裡安裝的是driver,不是mongodb喔!)
接著,我們要啟動我們的mongoDB Server,參考 Day17 - MongoDB 安裝設定
可在command prompt 輸入:
mkdir testdb /*也可以直接在app裡建一個測試的數據資料庫存放位置*/
mongod --dbpath c:\myapp\testdb
或是,如果已經設定好config的mongodb service,那就直接使用:
net start mongodb
註:這邊可能要用系統管理員身份執行command prompt 才可以正確執行!
var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/mymondb", function (err, db) {
if(err) throw err;
//Write databse Insert/Update/Query code here..
console.log('mongodb is running!');
db.close(); //關閉連線
});
這個例子裡,我們載入mongodb module,並且使用MongoClient物件。
接著,使用 MongoClient.connect()方法,以取得MongoDB資料庫的引用。
其中,URL的部份,"mongodb://localhost:27017/mymondb",指向你之前指定的MongoDB資料夾位置c:\myapp\testdb。
connect()方法,會回應一個 database參考 ,如果所描述的database—(這裡的例子叫做mymondb) 存在,就連線;無就自動新增。
我們來看看,以上例子,如果有成功連線時的執行結果:
當我們建立了Node.js 與 MongoDB 連線後,可以使用connect()裡的回呼函式其db參數,開始做一些 新增Insert(Create) / 更新Update / 查詢Query(Retrieve/Read) / 刪除Delete 資料 的動作。
現在,我們來為我們的資料庫新增一些資料。
var MongoClient=require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/mymondb",function(err,db){
if(err) throw err;
//Write databse Insert/Update/Query code here..
db.collection('Persons',function(err,collection){
collection.insert({ id:1, firstName:'Steve', lastName:'Jobs' });
collection.insert({ id:2, firstName:'Bill', lastName:'Gates' });
collection.insert({ id:3, firstName:'James', lastName:'Bond' });
collection.count(function(err,count){
if(err) throw err;
console.log('Total Rows:'+count);
});
});
db.close(); //關閉連線
});
在這個例子中,我們用 db.collection方法去新增並且獲取collections的一些資訊,如總筆數。
別忘了,在介紹MongoDB與關聯式資料庫的關係時,我們知道collection 其實就是 table
。而這個例子裡,我們在 mymondb 資料庫
建立了一個 Persons – collection(資料表)
,並且,為這Persons資料表新增了3筆資料,我們在這裡叫documents (列)
。
結果如圖:
我們也可以使用 mongo shell,查詢:
做完了新增,如果我們想要更新其中 id:1
的資料。
var MongoClient=require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/mymondb", function(err,db){
db.collection('Persons',function(err,collection){
//collection.update
//第一個參數是要更新的條件,第二個參數$set:更新的欄位及內容.
//第三個參數writeConcern,第四個參數執行update後的callback函式
collection.update({id:1},{ $set: { firstName:'James', lastName:'Gosling'} },
{w:1}, function(err, result){
if(err) throw err;
console.log('Document Updated Successfully');
});
});
db.close(); //關閉連線
});
關於第三個參數,writeConcern
網站:http://kyfxbl.iteye.com/blog/1952941
有詳細說明,可以去參考看看,我們這裡使用,常用的 {w:1} 即可,不用也沒差!
我們在command prompt 執行 node,並且在mongo shell 可以看到更新前與更新後的資料,如圖:
現在,我們想要刪除 id:2
的Document(Row)。
var MongoClient=require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/mymondb",function(err,db){
db.collection('Persons',function(err,collection){
collection.remove({id:2},{w:1},function(err,result){
if(err) throw err;
console.log('Document Removed Successfully!');
});
});
db.close(); //關閉連線
});
我們在command prompt 執行 node,並且在mongo shell 可以看到刪除前與刪除後的資料,如圖:
維持 Persons 新增後的狀態!即原本的3筆!現在,我們想要找 firstName:"Bill"
。
var MongoClient=require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/mymondb",function(err,db){
db.collection("Persons",function(err,collection){
collection.find({firstName:"Bill"}).toArray(function(err,items){
if(err) throw err;
console.log(items);
console.log("We found "+items.length+" results!");
});
});
db.close(); //關閉連線
});
我們在command prompt 執行 node,可以看到被擷取出來的結果,如圖:
關於更多Collection的操作,可以參考:Collection Methods,特別在使用查詢find,有不同於以往SQL 的使用語法。